分享主軸
Session 是一種在 Server 端存儲用戶資料的機制,當用戶第一次訪問應用程式時,Server 會創建一個唯一的 Session ID ,並將其存儲在用戶的瀏覽器 Cookie 中,每次用戶發送請求時,瀏覽器會將這個 Session ID 發送回 Server,Server 根據這個 ID 來找到相應的 Session 資料狀態

Program.cs
builder.Services.AddDistributedMemoryCache();
builder.Services.AddSession(options =>
{
    options.IdleTimeout = TimeSpan.FromMinutes(20);
    options.Cookie.HttpOnly = true;
    options.Cookie.IsEssential = true;
});
...
app.UseSession();
...
Controller(設定 Session 與 取得 Session )
public class HomeController : Controller
{
    public IActionResult Index()
    {
        // 設置 Session 值
        HttpContext.Session.SetString("Test", "Hello World");
        return View();
    }
    public IActionResult About()
    {
        // 獲取 Session 值
        string sessionValue = HttpContext.Session.GetString("Test");
        ViewBag.SessionValue = sessionValue;
        return View();
    }
}
非控制器地方使用到或是寫成共用,如下範例
public class SessionService
{
    private readonly IHttpContextAccessor _httpContextAccessor;
    public SessionService(IHttpContextAccessor httpContextAccessor)
    {
        _httpContextAccessor = httpContextAccessor;
    }
    public void SetSessionValue(string key, string value)
    {
        _httpContextAccessor.HttpContext.Session.SetString(key, value);
    }
    public string GetSessionValue(string key)
    {
        return _httpContextAccessor.HttpContext.Session.GetString(key);
    }
}
1. Cookie 設定
Cookie.HttpOnly:設置為 true 時,Cookie 只能通過 HTTP 請求,無法通過 JavaScript 訪問,這有助於防止跨站腳本攻擊(XSS)
Cookie.IsEssential:設置為 true 時,即使使用者未同意 Cookie 政策,這個 Cookie 也會被存儲
Cookie.Path:設置 Cookie 的路徑,默認為 /
Cookie.Domain:設置 Cookie 的域名,默認為當前域名
2. IdleTimeout
3. IOTimeout
參考文章
https://learn.microsoft.com/zh-tw/aspnet/core/fundamentals/app-state?view=aspnetcore-8.0
https://www.aspsnippets.com/Articles/4723/Net-Core-8-Using-Session-in-ASPNet-Core/